home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu745.dms / pu745.adf / GLOBE099.LHA / Ami-Globe / convert_map.c < prev    next >
C/C++ Source or Header  |  1994-04-29  |  3KB  |  159 lines

  1. /* Convertion d'une serie de pt qui est a la precision maximum a une */
  2. /* serie de points qui ne garde que les point de precision 5        */
  3.  
  4. #include <exec/types.h>
  5.  
  6. /* ANSI C */
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <stdio.h>
  10. #include <ctype.h>
  11.  
  12. tst_end(
  13.     FILE    *input
  14.     )
  15. {
  16.     char c;
  17.     int    code_ret;
  18.  
  19.     /* lecture du prochain caractere */
  20.     do
  21.     {
  22.         c=getc(input);
  23.         if(c==EOF)return(TRUE);
  24.         if(c=='#')
  25.         {
  26.             do
  27.             {
  28.                 c=getc(input);
  29.             }
  30.               while ((c!=0x0a)&&(c!=EOF));
  31.             c=getc(input);
  32.         }
  33.  
  34.     }
  35.       while  ((!isalnum(c))&&(c!='E'));
  36.     if  ((!isalpha(c))||(c!='E'))
  37.     {
  38.         ungetc(c,input);
  39.         code_ret=FALSE;
  40.     }
  41.     else
  42.     {
  43.         code_ret=TRUE;
  44.     }
  45.     return(code_ret);
  46. }
  47.  
  48. void convert_map(
  49.     char *p_filename,
  50.     char *out_filename
  51.     )
  52. {
  53.     FILE    *input;
  54.     FILE    *output;
  55.     int    x, y,code;
  56.     int    minx,miny,maxx,maxy;
  57.     char    c1,c2,c;
  58.     BOOL    flg_end,flg_border,flg_zone;
  59.     int    num_border,num_pt;
  60.  
  61.     printf("Lecture de %s\n",p_filename);
  62.     flg_end=FALSE;
  63.  
  64.     input = fopen(p_filename,"r");
  65.     output = fopen(out_filename,"w");
  66.     if(input && output )
  67.     {
  68.  
  69.  
  70.         /* Premiere chose, la taille max de notre carte...*/
  71.  
  72.         fscanf( input ,"%ld%ld%ld%ld"  ,&minx,&miny,&maxx,&maxy);
  73.         minx=-18000;
  74.         maxx= 18000;
  75.         miny=-9000;
  76.         maxy= 9000;
  77.         fprintf(output,"%ld %ld %ld %ld\n", minx, miny, maxx, maxy);
  78.         printf("minx:%ld miny:%ld maxx:%ld maxy:%ld\n",minx,miny,maxx,maxy);
  79.  
  80.  
  81.         printf("Lecture des borders\n");
  82.         flg_zone=TRUE;
  83.         num_border=0;
  84.     
  85.         do
  86.         {
  87.             flg_border=TRUE;
  88.             num_pt=0;
  89.             do
  90.             {
  91.                 c1=getc(input);
  92.                 c2=getc(input);
  93.                 if (c2=='#')
  94.                 {
  95.  
  96.                     do
  97.                     {
  98.                         c=getc(input);
  99.                     }
  100.                       while ((c!=0x0a)&&(c!=EOF));
  101.                     flg_border=FALSE;
  102.  
  103.                 }
  104.                 else
  105.                 {
  106.                     ungetc(c2,input);
  107.                     ungetc(c1,input);
  108.                 
  109.                     fscanf(input,"%ld %ld %ld",&code,&x,&y);
  110.                     if ((code>=5)||(num_pt==0))
  111.                     {
  112.                         fprintf(output," %ld %ld %ld",code,x,y);
  113.                         num_pt++;
  114.                         if(num_pt>30)
  115.                         {
  116.                             fprintf(output,"\n");
  117.                             num_pt=0;
  118.                         }
  119.                     }
  120.  
  121.                 }
  122.             }
  123.               while(flg_border==TRUE);
  124.  
  125.         
  126.             /* On s'assure que le dernier point est bien de niveau 5 */
  127.             if (code<5)
  128.             {
  129.                 fprintf(output," 5 %ld %ld",x,y);
  130.             }
  131.             fprintf(output," #%d\n",num_border);
  132.             num_border++;
  133.  
  134.             if (tst_end(input)==TRUE)
  135.             {
  136.                 printf("End of border def\n");
  137.                 flg_zone=FALSE;
  138.             }
  139.  
  140.         }
  141.           while (flg_zone==TRUE);
  142.         fprintf(output,"E\n");
  143.         fclose(input);
  144.         fclose(output);
  145.     }
  146. }
  147.  
  148. main(int    argc,char **argv)
  149. {
  150.     if(argc!=3)
  151.     {
  152.         printf("Conversion e fichier .data\nUsage convert_map <fichier source> <fichier dest>\n");
  153.     }
  154.     else
  155.     {
  156.         convert_map(argv[1],argv[2]);
  157.     }
  158. }
  159.